package br.com.velp.sudecap.util;

import java.lang.reflect.Field;
import java.text.Normalizer;
import org.apache.commons.lang.StringUtils;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 17.05.2013 </data_criacao>
 * <data_ultima_alteracao> 20.05.2013 </data_ultima_alteracao>
 * <descricao> Classe Utilitária Para Normalização de Entidades
 *             e Demais Atributos
 * </descricao>
 * </sumario>
 */
public class NormalizacaoUtil {
    
    /**
     * 
     * Responsável Por Percorrer Todos Os Atributos de Um 
     * Determinado Objeto, e Remover as Acentuações dos 
     * Atributos Tipo String. 
     * 
     * @param Object entity 
     * 
     */
    public static void normalizarEntidade(Object entity){
        
        try {
            
            Class clazz = entity.getClass();
            
            for(Field field : clazz.getDeclaredFields()){

                field.setAccessible(Boolean.TRUE);
                Object fieldValue = field.get(entity); 
                Class fieldClass = field.getType();
                
                //Caso o Tipo do Atributo Seja STRING, Será Realizada a Remoção das Acentuações
                if(fieldClass.equals(String.class) && StringUtils.isNotBlank((String) fieldValue)){
                    field.set(entity, removerAcentuacao((String) fieldValue));
                } 
                
            }
            
        } catch (Exception e) {
            
            MensagemUtil.exibirMensagemErro(e.toString());
            
        }        
        
    }
    
    /**
     * 
     * Responsável Pela Normalização de Uma String, 
     * Removendo Seus Acentos.
     * 
     * @param String value
     * @return String normalizada
     * 
     */
    public static String removerAcentuacao(String value){
        
        if(StringUtils.isBlank(value)){
            return null;
        }
        
        value = Normalizer.normalize(value, Normalizer.Form.NFD);
	value = value.replaceAll("[^\\p{ASCII}]", "");
        
	return value;        
        
    }        
    
}
